﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;

namespace TestImpresion.Clases
{
    public class FormularioUno
    {
        private string _paginas;
        private string _ejemplares;
        private string _costoPliego;
        private string _costoImpresion;
        private int _totalPliegos;
        private float _precioTotalPliegos;
        private float _precioTotal;
        private double _lomo;
        private bool _todosCampos;
        public string Paginas {
            get { return _paginas; }
            set {
                ValidaValorEntrada(value);
            _paginas = value;
            }
        }
        public string Ejemplares
        {
            get { return _ejemplares; }
            set
            {
                ValidaValorEntrada(value);
                _ejemplares = value;
            }
        }
        public string CostoPliego
        {
            get { return _costoPliego; }
            set
            {
                ValidaValorEntradaFlotante(value);
                _costoPliego = value;
            }
        }
        public string CostoImpresion
        {
            get { return _costoImpresion; }
            set
            {
                ValidaValorEntradaFlotante(value);
                _costoImpresion = value;
            }
        }
        public List<ListBoxItem> Pliegos {
            get {  List<ListBoxItem> _pliegos= new List<ListBoxItem>();
                _pliegos.Add( new ListBoxItem{Content="Pliego Carta"});
                _pliegos.Add( new ListBoxItem{Content="Pliego Oficio"});
                _pliegos.Add( new ListBoxItem{Content="Pliego Carta Rebasado"});
                return _pliegos;
            }
        }
        public List<ListBoxItem> Size
        {
            get
            {
                List<ListBoxItem> _size = new List<ListBoxItem>();
                _size.Add(new ListBoxItem { Content = "1/2" });
                _size.Add(new ListBoxItem { Content = "1/4" });
                _size.Add(new ListBoxItem { Content = "1/8" });
                _size.Add(new ListBoxItem { Content = "1/16" });
                _size.Add(new ListBoxItem { Content = "1/32" });
                return _size;
            }
        }

        private void ValidaValorEntrada(string valor) 
        {            
            ValidaVacio(valor);
            ValidaEntero(valor);
        }
        private void ValidaValorEntradaFlotante(string valor)
        {
            ValidaVacio(valor);
            ValidaNumero(valor);
        }
        private void ValidaEntero(string valor) 
        {
            int salida;
            if (!Int32.TryParse(valor, out salida))
            {
                _todosCampos = false;
                throw new Exception(@"El valor ingrsado debe de ser un número entero");
            }
        }
        private void ValidaNumero(string valor)
        {
            float salida;
            if (!float.TryParse(valor, out salida))
            {
                _todosCampos = false;
                throw new Exception(@"El valor ingrsado debe de ser de tipo númerico");
            }
        }
        private void ValidaVacio(string valor) 
        {
            if (String.IsNullOrEmpty(valor))
            {
                _todosCampos = false;
                throw new Exception(@"Este campo no puede quedar vacio");
            }
        }

        public float CalculaPrecioPliegos() 
        {
            try
            {
                ValidaValorEntrada(_costoPliego);
            }
            catch (Exception) {
                CostoPliego = string.Empty;
            }
            _precioTotalPliegos= _totalPliegos * float.Parse    (_costoPliego);
            return _precioTotalPliegos;
        }
        public float CalculaPrecioTotal() 
        {
            try
            {
                ValidaValorEntrada(_costoImpresion);
            }
            catch { CostoImpresion = string.Empty; }
            _precioTotal= float.Parse(_costoImpresion) + _precioTotalPliegos;
            return _precioTotal;
        }
        public int CalculaPliegosTiraje(int paginasPorPliego) 
        {
            try
            {
                ValidaValorEntrada(_paginas);
            }
            catch { Paginas = string.Empty; }
            try
            {
                ValidaValorEntrada(_ejemplares);
            }
            catch { Ejemplares = string.Empty; }
            var pliegos = Math.Floor(Convert.ToInt32(_paginas) / paginasPorPliego);
             _totalPliegos=(int)Math.Floor(pliegos * Convert.ToInt32(_ejemplares) * 1.15);
             return _totalPliegos;

        }
        public double CalculaLomo() 
        {
            //gramaje lo colocamos en 0.39 que es la mitad de la lista que nos dio quicio.
            _lomo = 0.39 * Convert.ToInt32(_paginas);
            return _lomo;
        }

    }
}
